package com.example.design.sercive.decorator;

import com.example.design.pojo.Order;
import com.example.design.sercive.inner.OrderServiceInterface;

//装饰器模式抽象装饰器角色
public abstract class AbstractOderServiceDecorator implements OrderServiceInterface {
    //关联被装饰对象
    private OrderServiceInterface orderServiceInterface;

    //使用 set 方法初始化被装饰对象
    public void setOrderServiceInterface(OrderServiceInterface orderServiceInterface) {
        this.orderServiceInterface = orderServiceInterface;
    }

    //覆写createOrder方法，但不改变方法逻辑，直接调用orderServiceInterface的createOrder方法
    @Override
    public Order createOrder(String productId) throws Exception {
        return orderServiceInterface.createOrder(productId);
    }

    //覆写getPayUrl方法，但不改变方法逻辑，直接调用orderServiceInterface的getPayUrl方法
    @Override
    public String getPayUrl(String orderId, Float price, Integer payType) {
        return orderServiceInterface.getPayUrl(orderId, price, payType);
    }

    //覆写payOrder方法，但不改变方法逻辑，直接调用orderServiceInterface的payOrder方法
   @Override
    public Order payOrder(String orderId) {
        return orderServiceInterface.payOrder(orderId);
    }

    //覆写receiveOrder方法，但不改变方法逻辑，直接调用orderServiceInterface的receiveOrder方法
    @Override
    public Order receiveOrder(String orderId) {
        return orderServiceInterface.receiveOrder(orderId);
    }

    //覆写sendOrder方法，但不改变方法逻辑，直接调用orderServiceInterface的sendOrder方法
    @Override
    public Order sendOrder(String orderId) {
        return orderServiceInterface.sendOrder(orderId);
    }

    //定义新的方法，根据userId 和 productId 更新用户积分、发放红包
    protected abstract void updateUserScoreAndSendRedPaper( String productId,int serviceLevel,float price);

}
